home *** CD-ROM | disk | FTP | other *** search
/ Workbench Add-On / Workbench Add-On - Volume 1.iso / Gfx / Edit / TSMorph / src / jpeg_ls / jwrmem.c < prev   
C/C++ Source or Header  |  1994-10-30  |  4KB  |  142 lines

  1. /*
  2.  * jwrmem.c
  3.  *
  4.  * Copyright (C) 1991, 1992, Thomas G. Lane.
  5.  * This file is part of the Independent JPEG Group's software.
  6.  * For conditions of distribution and use, see the accompanying README file.
  7.  *
  8.  * This file contains routines to write output images to memory - based on jwrppm.c
  9.  *
  10.  * These routines are invoked via the methods put_pixel_rows, put_color_map,
  11.  * and output_init/term.
  12.  */
  13.  
  14. #include "jinclude.h"
  15.  
  16. #include <proto/exec.h>
  17.  
  18. extern UBYTE *r1,*g1,*b1;
  19.  
  20. /*
  21.  * Write the file header.
  22.  */
  23.  
  24. static UBYTE *curr,*curg,*curb;
  25.  
  26. METHODDEF void
  27. output_init (decompress_info_ptr cinfo)
  28. {
  29.   /* Allocate the memory */
  30.   if (cinfo->quantize_colors) {
  31.     if (cinfo->output_file = (BPTR)AllocVec(((((ULONG)cinfo->image_width+15)>>4)<<4) * (ULONG)cinfo->image_height,NULL)) {
  32.       curr = (UBYTE *)cinfo->output_file;
  33.     }
  34.     else {
  35.       ERREXIT(cinfo->emethods, "Unable to allocate Memory");    // ????
  36.     }
  37.   }
  38.   else {
  39.     if (cinfo->output_file = (BPTR)AllocVec(((((ULONG)cinfo->image_width+15)>>4)<<4) * (ULONG)cinfo->image_height * (ULONG)3,NULL)) {
  40.       curr = (UBYTE *)cinfo->output_file;
  41.       curg = curr + (((cinfo->image_width+15)>>4)<<4) * cinfo->image_height;
  42.       curb = curg + (((cinfo->image_width+15)>>4)<<4) * cinfo->image_height;
  43.     }
  44.     else {
  45.       ERREXIT(cinfo->emethods, "Unable to allocate Memory");    // ????
  46.     }
  47.   }
  48. }
  49.  
  50.  
  51. /*
  52.  * Write some pixel data.
  53.  */
  54.  
  55. METHODDEF void
  56. put_color_rows (decompress_info_ptr cinfo, int num_rows,
  57.            JSAMPIMAGE pixel_data)
  58. {
  59.   register JSAMPROW ptr0;
  60.   register JSAMPROW ptr1;
  61.   register JSAMPROW ptr2;
  62.   register long col;
  63.   long width = cinfo->image_width;
  64.   int row;
  65.   
  66.   if (cinfo->quantize_colors) {
  67.     for (row = 0; row < num_rows; row++) {
  68.       ptr0 = pixel_data[0][row];
  69.       for (col = width; col > 0; col--) {
  70.         *curr = GETJSAMPLE(*ptr0);
  71.         curr++;
  72.         ptr0++;
  73.       }
  74.       curr += ((((cinfo->image_width+15)>>4)<<4) - cinfo->image_width);
  75.     }
  76.   }
  77.   else {
  78.     for (row = 0; row < num_rows; row++) {
  79.       ptr0 = pixel_data[0][row];
  80.       ptr1 = pixel_data[1][row];
  81.       ptr2 = pixel_data[2][row];
  82.       for (col = width; col > 0; col--) {
  83.         *curr = GETJSAMPLE(*ptr0);
  84.         curr++;
  85.         ptr0++;
  86.         *curg = GETJSAMPLE(*ptr1);
  87.         curg++;
  88.         ptr1++;
  89.         *curb = GETJSAMPLE(*ptr2);
  90.         curb++;
  91.         ptr2++;
  92.       }
  93.       curr += ((((cinfo->image_width+15)>>4)<<4) - cinfo->image_width);
  94.       curg += ((((cinfo->image_width+15)>>4)<<4) - cinfo->image_width);
  95.       curb += ((((cinfo->image_width+15)>>4)<<4) - cinfo->image_width);
  96.     }
  97.   }
  98. }
  99.  
  100. METHODDEF void
  101. put_color_map (decompress_info_ptr cinfo, int num_colors, JSAMPARRAY colormap)
  102. {
  103.   register JSAMPROW color_map0 = cinfo->colormap[0];
  104.   register JSAMPROW color_map1 = cinfo->colormap[1];
  105.   register JSAMPROW color_map2 = cinfo->colormap[2];
  106.     UWORD i;
  107.   if (cinfo->quantize_colors) {
  108.     for (i = 0;
  109.           i < num_colors;
  110.           ++i) {
  111.         r1[i] = GETJSAMPLE(color_map0[i]);
  112.         g1[i] = GETJSAMPLE(color_map1[i]);
  113.         b1[i] = GETJSAMPLE(color_map2[i]);
  114.     }
  115.   }
  116. }
  117.  
  118. /*
  119.  * Finish up at the end of the file.
  120.  */
  121.  
  122. METHODDEF void
  123. output_term (decompress_info_ptr cinfo)
  124. {
  125.   /* Do nothing */
  126. }
  127.  
  128.  
  129. /*
  130.  * The method selection routine for Memory format output.
  131.  * This should be called from d_ui_method_selection if Memory output is wanted.
  132.  */
  133.  
  134. GLOBAL void
  135. jselwmem (decompress_info_ptr cinfo)
  136. {
  137.   cinfo->methods->output_init = output_init;
  138.   cinfo->methods->put_color_map = put_color_map;
  139.   cinfo->methods->put_pixel_rows = put_color_rows;
  140.   cinfo->methods->output_term = output_term;
  141. }
  142.